package com.jwds.digital.bios.business.core.utils;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>BeltCloudTimeUtil</p>
 *
 * @author 林柏云
 * @Date：2024/11/28 16:25
 */
public class BeltCloudTimeUtil {

  /**
   * 获取下一个统计结束时间
   * @param interval 时间间隔，单位为分钟
   */
  public static String getNextStatisticsEndTime(String startTime, int interval){

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
      Calendar calendar = Calendar.getInstance();
      Date date = formatter.parse(startTime);
      calendar.setTime(date);
      int currentMinute = calendar.get(Calendar.MINUTE);
      // 计算当前时间到下一个整数分数的分钟差
      int minutesToAdd = interval - (currentMinute % interval);
      // 在当前时间基础上添加分钟数，获取下一个整数分数的时间
      calendar.add(Calendar.MINUTE, minutesToAdd);
      calendar.set(Calendar.SECOND, 0);
      // 输出结果
      return formatter.format(calendar.getTime());
    } catch (ParseException e) {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * 获取下一个统计结束时间
   * @param interval 时间间隔，单位为分钟
   */
  public static LocalDateTime getNextStatisticsEndTime(LocalDateTime startTime, int interval){

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
      Calendar calendar = Calendar.getInstance();
      Date date = formatter.parse(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
      calendar.setTime(date);
      int currentMinute = calendar.get(Calendar.MINUTE);
      // 计算当前时间到下一个整数分数的分钟差
      int minutesToAdd = interval - (currentMinute % interval);
      // 在当前时间基础上添加分钟数，获取下一个整数分数的时间
      calendar.add(Calendar.MINUTE, minutesToAdd);
      calendar.set(Calendar.SECOND, 0);
      // 输出结果
      LocalDateTime result = LocalDateTime.parse(formatter.format(calendar.getTime()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
      return result;
    } catch (ParseException e) {
      e.printStackTrace();
    }
    return null;
  }


  /**
   * 计算时间段内的尖、峰、平、谷电量
   * @param startTime 开始时间
   * @param endTime 结束时间
   * @param totalPowerConsumption 总电量
   * @return
   */
  public static Map<String, BigDecimal> getPerStagePowerConsumption(LocalDateTime startTime, LocalDateTime endTime, BigDecimal totalPowerConsumption){
    Map<String, BigDecimal> map = new HashMap<>(4);
    //尖 峰 平 谷
    map.put("spike", BigDecimal.ZERO);
    map.put("peak", BigDecimal.ZERO);
    map.put("flat", BigDecimal.ZERO);
    map.put("valley", BigDecimal.ZERO);
    return map;
  }

}
